home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
d
/
mttrees.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
5KB
|
119 lines
(*----------------------------------------------------------------------*
* *
* MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
* Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
* oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
* boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
* Einverstndnisserklrung des Autors. *
* *
* Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
* fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
* Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
* widerrufen. *
*----------------------------------------------------------------------*)
(*----------------------------------------------------------------------*
* mtTrees Implementiert einen binren Baum. *
* *
* Durch die typlose Datenform der zu speichernden Information kann das *
* Modul sehr flexibel eingesetzt werden. Maximale Speichergre der *
* Information ist 32kb. *
*----------------------------------------------------------------------*)
DEFINITION MODULE mtTrees;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
IMPORT SYSTEM;
TYPE NODE; (* Eintrag in den Baum *)
TYPE TREE; (* Baumtyp *)
TYPE CompResult = (smaller, equal, bigger);
CompProc = PROCEDURE ( (* left *) SYSTEM.ADDRESS,
(* right *) SYSTEM.ADDRESS): CompResult;
(* Eine Prozedur dieses Typs definiert die Ordnung, in der die Liste
* angelegt wird.
* Die Prozedur soll "smaller" returnieren, wenn der Eintrag left kleiner
* bzw. logisch VOR right einzuordnen ist; equal, wenn die Eintrge gleich
* sind; und bigger wenn der Eintrag left grer bzw. logisch NACH right
* einzuordnen ist. Die Prozedur bekommt immer POINTER bergeben, daher die
* ADDRESS-Parameter.
*
* Beispiel fr eine CompProc:
*
* PROCEDURE Compare (left, rigth: ADDRESS): CompResult;
* VAR l, r: POINTER TO ARRAY [0..10] OF CHAR;
* BEGIN
* l:= left; r:= right;
* IF l^[0] < r^[0] THEN RETURN smaller; END;
* IF l^[0] = r^[0] THEN RETURN equal; END;
* RETURN bigger;
* END Compare;
*
*)
PROCEDURE NewTree (VAR tree: TREE; comp: CompProc): BOOLEAN;
(* Generiert einen neuen Baum *)
PROCEDURE DisposeTree (VAR tree: TREE);
(* Lscht einen Baum, wenn der Baum nicht leer ist, wird er vorher gelscht. *)
PROCEDURE TreeEntries (tree: TREE): lCARDINAL;
(* Anzahl der Eintrge im Baum *)
PROCEDURE NilNode (): NODE;
(* Liefert einen leeren NODE, zum Vergleichen usw. *)
PROCEDURE InsertNode (tree: TREE; info: ARRAY OF LOC): BOOLEAN;
(* Legt ein Element im Baum ab, FALSE wenn dabei ein Fehler auftritt.
* ACHTUNG! Doppelte Eintrge werden ignoriert!
*)
PROCEDURE SearchNode (tree: TREE; from: NODE; info: ARRAY OF LOC;
key: CompProc): NODE;
(* Sucht im Baum nach dem Element info, liefert einen Zeiger darauf.
* Mit key wird eine Prozedur bergeben, die die Elemente vergleicht.
* Tip: Die in info bergebenen Daten mssen ja nicht komplett sein.
* Es kommt auf die Prozedur key an...
*)
PROCEDURE DeleteNode (tree: TREE; VAR node: NODE);
(* Lscht einen Eintrag aus dem Baum *)
PROCEDURE FirstNode (tree: TREE): NODE;
(* Liefert den ersten Eintrag der Baums *)
PROCEDURE LastNode (tree: TREE): NODE;
(* Liefert den letzten Eintrag des Baums *)
PROCEDURE NextNode (node: NODE): NODE;
(* Liefert den nachfolgenden Eintrag der Baums *)
PROCEDURE PrevNode (node: NODE): NODE;
(* Liefert den vorhergehenden Eintrag der Baums *)
PROCEDURE GetNode (node: NODE; VAR info: ARRAY OF LOC): BOOLEAN;
(* bertrgt ein Element aus dem Baum. Es wird nur kopiert, wenn die
* Datenstruktur gleich oder grer als die gespeicherte Struktur ist.
* FALSE wenn dabei ein Fehler auftritt (info zu klein, node NIL).
*)
END mtTrees.